package ai.esc.speedy.common.util.id;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.*;

/**
 * 基于 Spring Cloud 分配 Worker Id
 * <p>
 * 上面介绍了如何使用 Snowflake 来生成 ID，那么结合 Spring Cloud ，我们需要给每个节点分配一个 Worker ID，
 * 但是由于 Spring Cloud 的特点，它是希望每个节点无状态化的，这就给我们分配 Worker ID 带来了一定的难度，
 * 如果我们需要区分每个几点，就不得不将节点信息存储到某个中央，然后再分配，为了便于之后的水平扩展，这里我们基于内部代码实现，
 * 大概的原理是在服务启动的时候，记录下节点 IP 和 MAC ，作为 Service Node Key 存储到数据库，
 * 这个 Key 在数据库中唯一，通过这个唯一的 Key 给不同的节点分配 ID。( JPA 实现)
 *
 * @author 周国勇
 * <p>
 * 周广明整理、添加备注
 * @version v1 2019/12/24 17:01
 */
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "sys_tool_workerid")
public class WorkerId {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(unique = true)
    private String serviceKey;
}
